package com.itheima.service;

import com.alibaba.dubbo.config.annotation.Service;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.itheima.dao.CheckItemGroupDao;
import com.itheima.entity.PageResult;
import com.itheima.entity.QueryPageBean;
import com.itheima.pojo.CheckGroup;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import service.CheckItemsGroupService;

import java.util.HashMap;
import java.util.List;
/**
 * 检查组服务接口
 */
@Transactional
@Service(interfaceClass =CheckItemsGroupService.class )
public class CheckItemsGroupServiceImpl implements CheckItemsGroupService{



   @Autowired
    private CheckItemGroupDao checkItemsGroupDao;


    //添加检查组合，同时需要设置检查组合和检查项的关联关系
    @Override
    public void add(CheckGroup checkGroup,int[] checkitemIds) {
        //1.保存检查组数据,dao层已经写了selectKey标签获取检查组id
        checkItemsGroupDao.add(checkGroup);
        //2.循环检查项ids 和 检查组id 插入检查组和检查项中间表中
        setCheckGroupAndCheckItem( checkGroup.getId(),checkitemIds);




    }

    /**
     * 分页
     * @param
     * @param
     * @param
     * @return
     */

    @Override
    public PageResult findAll(QueryPageBean queryPageBean, QueryPageBean queryPageBean1) {
        //设置分页数据
        PageHelper.startPage(queryPageBean.getCurrentPage(), queryPageBean.getPageSize());
        Page<CheckGroup> page=checkItemsGroupDao.findAll(queryPageBean.getQueryString());

        return new PageResult(page.getTotal(),page.getResult());
    }

    /**
     * 根据检查组id查询检查组对象
     * @param
     * @return
     */
    @Override
    public CheckGroup findcheckGroupById(int id) {
        CheckGroup checkGroup=  checkItemsGroupDao.findcheckGroupById(id);
        return checkGroup;
    }
    /**
     * 根据检查组id查询对应的检查项目的id ,查询的是中间表t_checkgroup_checkitem
     * @param
     * @return
     */
    @Override
    public List<Integer> findCheckitemIds_BycheckgroupId(int id) {

        return checkItemsGroupDao.findCheckitemIds_BycheckgroupId(id);
    }

    //编辑检查组，同时需要更新和检查项的关联关系
    @Override
    public void updateItemsGroup(CheckGroup checkGroup, int[] checkitemIds) {
        //1.修改检查组数据
        checkItemsGroupDao.updateItemsGroup(checkGroup);
        if(checkitemIds!=null&&checkitemIds.length>0){
            //2.根据检查组id 删除检查组和检查项中间表数据
            Integer groupId = checkGroup.getId();
            checkItemsGroupDao.deletecheckitem_idBycheckgroup_id(groupId);

//            //3.重新建立检查组和检查项关系
            setCheckGroupAndCheckItem(groupId,checkitemIds);
        }
    }

    /**
     * 查找所有的检查组,用于添加套餐的弹出窗口
     */
    @Override
    public List<CheckGroup> findAll2() {
        List<CheckGroup> checkGroupList=checkItemsGroupDao.findAll2();

        return checkGroupList;
    }

    /**
     * //向中间表(t_checkgroup_checkitem)插入数据（建立检查组和检查项关联关系）
     */
    public void setCheckGroupAndCheckItem(Integer checkGroupId,int[] checkitemIds){

        if (checkitemIds!=null&&checkitemIds.length>0){
            HashMap<String,Integer> hm = new HashMap();
            for (int checkitemId : checkitemIds) {
                hm.put("checkGroupId", checkGroupId);
                hm.put("checkitemId", checkitemId);
                checkItemsGroupDao.addt_checkgroup_checkitem(hm);
            }
        }
}


}
